package com.starry.module.system.core.menu.service;

import com.starry.core.common.domain.vo.PageVo;
import com.starry.module.system.api.menu.domain.qo.SysMenuPageQo;
import com.starry.module.system.api.menu.domain.qo.SysMenuQo;
import com.starry.module.system.api.menu.domain.qo.SysMenuTreeQo;
import com.starry.module.system.api.menu.domain.vo.LoginRouterVo;
import com.starry.module.system.api.menu.domain.vo.SysMenuDtlVo;
import com.starry.module.system.api.menu.domain.vo.SysMenuTreeVo;
import com.starry.module.system.api.menu.domain.vo.SysMenuVo;

import java.util.List;
import java.util.Set;

/**
 * 系统菜单-服务
 *
 * @author xiaoke
 */
public interface SysMenuService {

    /**
     * 分页查询所有数据
     *
     * @param pageQo 查询实体
     * @return 所有数据
     */
    PageVo<SysMenuVo> page(SysMenuPageQo pageQo);

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    SysMenuDtlVo getById(Long id);

    /**
     * 新增数据
     *
     * @param sysMenuQo 实体对象
     * @return 新增结果
     */
    Long save(SysMenuQo sysMenuQo);

    /**
     * 获取所有权限
     *
     * @return 所有权限
     */
    Set<String> getAllPerms();

    /**
     * 批量查询是否存在
     *
     * @param menuIdList 主键集合
     * @return 是否存在
     */
    boolean existMenuList(Set<Long> menuIdList);

    /**
     * 修改数据
     *
     * @param sysMenuQo 实体对象
     */
    void updateById(SysMenuQo sysMenuQo);

    /**
     * 删除数据
     *
     * @param idList 主键集合
     */
    void removeByIds(Set<Long> idList);

    /**
     * 启用数据
     *
     * @param idList 主键集合
     */
    void enable(Set<Long> idList);

    /**
     * 禁用数据
     *
     * @param idList 主键集合
     */
    void disable(Set<Long> idList);

    /**
     * 获取当前登陆用户的菜单路由
     *
     * @return 菜单路由
     */
    List<LoginRouterVo> getByLoginUserMenuRouter();

    /**
     * 获取菜单树
     *
     * @param treeQo 菜单树查询条件
     * @return 菜单树
     */
    List<SysMenuTreeVo> getMenuTree(SysMenuTreeQo treeQo);

    /**
     * 获取租户菜单树
     *
     * @param treeQo 菜单树查询条件
     * @return 菜单树
     */
    List<SysMenuTreeVo> getTenantMenuTree(SysMenuTreeQo treeQo);
}

